/*
  当在浏览器输入一个地址，按下回车发生了什么

    解析 URL
      解析URL是否合法合规
        合规走到下一步
        不合规出错

    缓存判断
      判断该资源是否命中缓存
        命中缓存，直接读取缓存
        没有命中缓存，走到下一步
    
    DNS解析
      将域名地址解析成ip地址（4个缓存和一个递归查询）
        判断浏览器是否有DNS缓存
        判断电脑是否有DNS缓存
        判断路由器是否有DNS缓存
        判断网络运营商是否有DNS缓存（花钱买DNS解析服务）
        就去根域名服务器递归查询DNS 
          a.b.c.com -> .com -> c.com -> b.c.com -> a.b.c.com 
          返回 ip 地址

    TCP连接
      TCP三次握手
        为什么需要三次握手：保证双方的收（接受数据）发（发送数据）能力正常
          1. 客户端发起，服务端接受
            服务端能确定客户端发送能力正常
          2. 服务端发起，客户端接受
            客户端能确定服务端收发能力都正常
          3. 客户端发起，服务端接受
             服务端能确定客户端接受能力正常

    发送请求
      浏览器将数据以请求报文形式发送给服务器

    返回响应
      服务器将数据以响应报文形式发送给浏览器

    解析渲染页面
      浏览器遇到html，使用html解析器将html元素解析成DOM树
      浏览器遇到css，使用css解析器将css解析成CSSOM树
      DOM树和CSSOM树结合生成render树
      浏览器根据render树，布局（layout），渲染（paint）
      浏览器遇到js，阻塞渲染，使用js引擎解析js代码
        如果js修改了html元素，重新构建DOM树
        如果js修改了样式，重新构建CSSOM树
        DOM树和CSSOM树重新结合生成render树
        浏览器根据render树，重新布局（layout），重新渲染（paint） -> 这个过程也叫重排重绘

      重排一定会导致重绘，重绘不一定导致重排（比如 opacity: 0）

      还有哪些会导致重排重绘：
        1. DOM操作
        2. 读取元素大小、位置等信息，也会触发重排重绘

    TCP断开链接
      TCP四次挥手
      为什么需要四次挥手：要彻底断开客户端和服务端连接
        1. 客户端发起，服务端接受，客户端请求报文发完了
        2. 服务端发起，客户端接受，服务端请求报文接受完了
        3. 服务端发起，客户端接受，服务器响应报文发完了
        4. 客户端发起，服务端接受，客户端响应报文接受完了
        开始断开链接
*/
